import pandas as pd
import matplotlib.pyplot as plt
from datetime import date
import os
# 设置中文字体和解决负号显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号 '-' 显示为方块的问题

# 读取数据
data = pd.read_excel("问题反馈.xlsx")

# 筛选当天数据
today = date.today().isoformat()
data = data[data['createdAt'] == '2025-07-22']

# 按feedbackType分组计数
feedback_counts = data.groupby("feedbackType")['id'].count().fillna(0)

# 创建图形和坐标轴
fig, ax1 = plt.subplots(figsize=(10, 6))

# 绘制柱状图
bars = ax1.bar(feedback_counts.index, feedback_counts.values, color='skyblue', alpha=0.7, label='数量')

ax1.set_xticklabels(
    feedback_counts.index,
    rotation=90,
    ha='center',  # 水平对齐方式（center/left/right）
    va='top',     # 垂直对齐方式（top/bottom/center）
    fontsize=8   # 可调整字体大小
)
ax1.set_ylabel(' 问题数量', fontsize=12)

# 在柱子上方添加数值标签
for bar in bars:
    height = bar.get_height()
    ax1.text(bar.get_x() + bar.get_width() / 2., height,
             f'{int(height)}',
             ha='center', va='bottom', fontsize=10)

# 创建第二个y轴用于折线图
ax2 = ax1.twinx()
ax2.plot(feedback_counts.index, feedback_counts.values,
         color='red', marker='o', linestyle='--', linewidth=2, markersize=8,
         label='趋势线')
ax2.set_ylabel(' 趋势线', fontsize=12)

# 设置标题和标签
plt.title(f'问题反馈类型分布 - {date.today().strftime("%Y年%m月%d日")}', fontsize=14, pad=20)

# 合并图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper right')

# 调整x轴标签旋转角度
plt.xticks(rotation=45, ha='right')

# 自动调整布局防止标签重叠
plt.tight_layout()

output_path = f'png/问题反馈统计_{date.today().strftime("%Y%m%d")}.png'
# 保存高清版本
plt.savefig(
    output_path,
    dpi=300,  # 高分辨率
    bbox_inches='tight',  # 去除多余白边
    facecolor='white',  # 背景设为白色（避免透明背景）
    transparent=False  # 非透明背景
)

print(f"图形已保存至：{output_path}")

# 显示图形
plt.show()
# 打印统计数据
print("=" * 50)
print(f"今日({today})问题反馈统计:")
print(feedback_counts)
print("=" * 50)
print(f"总计: {feedback_counts.sum()}  条反馈")